"""
zip
    将多个可迭代对象中对应的元素组合成一个个元组，生成的元组个数由最小的可迭代对象决定。
"""
name = ['韩耀祖','聂茹凤','谭新宇','李欣桐','刘千琪','张纪豪']
address = ['河北邯郸','吉林长春','吉林松原','吉林长春','吉林长春','北京']

# 可以将多个可迭代对象组合成元祖
for item in zip(name,address):
    print(item)

print('-' * 30)

# 矩阵转置
list_map = [
    [2,0,0,2],
    [3,0,0,3],
    [5,1,2,9],
    [7,4,8,2]
]
"""
行
    2 0 0 2
    3 0 0 3
    5 1 2 9
    7 4 8 2
把列转换成行
    2 3 5 7
    0 0 1 4
    0 0 2 8
    2 3 9 2
"""
for item in zip(list_map[0],list_map[1],list_map[2],list_map[3]):
    print(item)

print('='*20)

list_new = []
for item in zip(list_map[0],list_map[1],list_map[2],list_map[3]):
    list_new.append(list(item))

print(list_new)

print('+' * 20)

list_new1 = []
# 无论你的列表有多少行，通过*传递给zip
for item in zip(*list_map):
    list_new1.append(list(item))

print(list_new1)

print('***' * 20)

# 列表推导式
list_new2 = [list(item) for item in zip(*list_map)]
print(list_new2)


# 利用列表推导式 生成  生成器表达式
# 利用推导式形式创建生成器对象，就是生成器表达式
# 变量 = (表达式 for 变量 in 可迭代对象 if 条件)
# 1. 生成生成器对象
generator_new = (list(item) for item in zip(*list_map))
print(generator_new) # 打印结果是个地址： 因为生成器对象需要被遍历、

# 使用生成器对象
for item in generator_new:
    print(item)
